package main

import "fmt"

//函数的返回值可以有多个
//type 对函数返回值可以进行重命名
func Cal (num1 int,num2 int) (sum int,dif int) {
	//sum := num1 + num2
	//dif := num1 - num2
	sum = num1 + num2
	dif = num1 - num2
	//return sum,dif
	return
}

//函数默认传参方式是值拷贝
func exchangeNum(num1 int,num2 int){
	temp := num1;
	num1 = num2;
	num2 = temp
}

//函数不支持函数重载
// func exchangeNum(num1 float,num2 float){
// 	temp := num1;
// 	num1 = num2;
// 	num2 = temp
// }

func args(args...int){
	for i:=0;i<len(args);i++{
		fmt.Println("args...i:",i)
	}
}


//函数是一种类型
func functionType1(num int){
	fmt.Println(num)
}
func functionType2(num int,function func(int)){
	fmt.Println(num)
}
func main(){
	// sum,_ := Cal(2,1)
	// fmt.Println("两数之和为：",sum) 

	a,b := 1,2
	fmt.Printf("a: %d  b: %d \n",a,b)
	exchangeNum(a,b)
	fmt.Printf("a: %d  b: %d \n",a,b)

	args(2004,316,226)

	fmt.Printf("functionType的类型：%T\n",functionType1)
	c := functionType1
	c(10)
	functionType2(11,c)

	var num1 int
	type myint int
	var num2 myint
	num1 = 10
	num2 = 20
	fmt.Printf("num1的类型；%T\nnum2的类型：%T\n",num1,num2)
	//num2 = num1
}

